package com.yiji.fintech.musfinance.common.strategy.context;

import com.yiji.fintech.musfinance.base.enums.*;
import com.yiji.fintech.musfinance.common.enums.TrustModelEnum;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 构建渠道信息上下文
 * Created by ouwen@yiji.com} on 2017/9/22.
 */
@Data
public class TransactionContext implements Serializable {
    /**托管模式*/
    private TrustModelEnum trustModel;
    /**
     * 清算渠道API
     */
    private String gatewayChannelApi;

    /** 商户号 */
    private String partnerId;

    /**
     * 付款方、签约方机构代码
     */
    private String instBankId;
    /**
     * 付款方、签约方银行机构名称
     */
    private String instBankName;

    /**
     * 付款方、签约方银行机构code
     */
    private String instBankCode;

    /**备付金银行编码
     */
    private String bfjBankId;
    /**
     * 备付金账户名
     */
    private String bfjBankAccountName;
    /**
     * 备付金账户
     */
    private String bfjBankAccountNo;

    /**
     * 备份金账户对应合作机构名
     */
    private String bfjBankName;
    /**
     联行号
     */
    private String unionBankNo;
    /**
     * 分支行所在省
     */
    private String branchBankProvince;

    /**
     * 分支行所在市
     */
    private String branchBankCity;
    /**
     * 扩展字段
     */
    private Map<String, String> parameters = new HashMap<String, String>();
    /**
     * 交易类型
     *
     */
    private TransactionTypeEnum transactionType;
    /**
     * 子交易类型
     *
     */
    private SubTransactionTypeEnum subTransactionType;
    /**
     * 卡借贷类型
     *
     */
    private CardTypeEnum cardType;
    /**
     * 证件类型
     */
    private CertTypeEnum certType;

    /**
     * 对公对私
     **/
    private PersonalCorporateTypeEnum personalCorporateType;


    public String getParameter(String parameterName) {
        return parameters.get(parameterName);
    }
    public void addParameter(String parameterName, String parameterValue) {
        if (StringUtils.isEmpty(parameterName)) {
            return;
        }
        parameters.put(parameterName, parameterValue);
    }
    public void addParameters(Map<String, String> map) {
        if (map != null) {
            parameters.putAll(map);
        }
    }
    public Map<String, String> getParameters() {
        return this.parameters;
    }

    public void setParameters(Map<String, String> parameters) {
        this.parameters = parameters;
    }
}
